//阶乘
function factorial(n){

    //递归方法必须有一个出口
    if(n === 1 || n === 0){ //出口，满足什么条件就跳出递归
        return 1
    }

    //递归还需要一个入口
    return n * factorial(n-1) //满足什么条件就进入递归
}

factorial(5)
/*
* 细分问题：
*   5的阶乘是5*4的阶乘
*   4的阶乘是4*3的阶乘
*   3的阶乘是3*2的阶乘
*   2的阶乘是2*1的阶乘
*   1的阶乘是1*0的阶乘
*   所以只需要知道1和0的阶乘，就知道后面所有的阶乘
*   1的阶乘是1,0的阶乘是1
*
* */

//递归的逻辑
function doSomething(something){
    //递归就是做一些事情
    if(!something){
        //当有一个明确的结果，或是操作处理完成的时候，就退出
        return
    }
    //没有处理完成的时候就继续执行
    something() //这个函数表示一系列具体操作

    return doSomething() //继续做
}